# 94. 赢球票
# https://www.lanqiao.cn/problems/93/learning/?page=1&first_category_id=1&second_category_id=3
# Date:2025/1/3
import copy

from leetcode.test import test_function as tf

"""卡牌顺序可以随意, 但是每次计数要从1开始, 举例:
卡牌顺序为 1 2 3
从第一张牌开始:
开始
数1看1, 匹配, 收取第一张牌, 重新计数
数1看2, 不匹配; 数2看3, 不匹配; 数3看2, 不匹配; 
终局 收取1张

从第二张牌开始:
数1看2, 不匹配; 数2看3, 不匹配; 数3看1, 不匹配;
终局 收取0张

卡牌顺序为 2 1 3
从第一张牌开始:
数1看2, 不匹配; 数2看1, 不匹配; 数3看3, 匹配, 收取3并重新计数
数1看2, 不匹配; 数2看1, 不匹配;
终局 收取1张

从第二张牌开始:
数1看1, 匹配, 收取1并重新计数; 
数1看3, 不匹配; 数2看2, 匹配, 收取2并重新计数;
仅剩一张, 必然可以匹配
终局 收取3张
"""


def get_most_tickets(seq: list[int]):
    n = len(seq)
    res = 0
    for i in range(n):  # 从i开始看卡牌
        count = 1  # 计数
        cards_num = 0  # 抽到的卡牌数
        seq_copy = copy.copy(seq)  # 使用备份
        while seq_copy and count <= n:  # 终止条件: 抽完卡牌或者计数大于n
            i = i % len(seq_copy)  # 环形链表防止越界
            if seq_copy[i] == count:  # 如果匹配
                count = 1  # 重置计数
                cards_num += seq_copy[i]
                seq_copy.pop(i)  # 删除卡牌
            else:
                count += 1
                i += 1

        res = max(res, cards_num)

    return res


if __name__ == '__main__':
    # n = int(input())
    # seq = [int(i) for i in input().split()]
    # res = get_most_tickets(seq)
    # print(res)

    tf(get_most_tickets, {"seq": [1, 2, 3]},[] )
    print(get_most_tickets([1, 2, 3]))
    print(get_most_tickets([2, 1, 3]))
